import { putBucket } from "./bucket";
import client from "./client";
import { unlinkSync } from "./fs";
import { Response } from "express";
import path from "path";

/**
 * 上传单个文件
 * 直接上传的文件没有后缀名，可以重新命名并添加后缀
 * localPath 文件本地地址
 * ossPath 文件上传Oss后的名称
 */
export const uploadOss: (
  localPath: string,
  ossPath: string,
  res: Response
) => void = async (localPath, ossPath, res) => {
  try {
    await putBucket();

    // 自定义请求头
    const headers = {
      // // 指定Object的存储类型。
      // "x-oss-storage-class": "Standard",
      // // 指定Object的访问权限。
      // "x-oss-object-acl": "private",
      // // 通过文件URL访问文件时，指定以附件形式下载文件，下载后的文件名称定义为example.txt。
      // "Content-Disposition": 'attachment; filename="example.txt"',
      // // 设置Object的标签，可同时设置多个标签。
      // "x-oss-tagging": "Tag1=1&Tag2=2",
      // // 指定PutObject操作时是否覆盖同名目标Object。此处设置为true，表示禁止覆盖同名Object。
      // "x-oss-forbid-overwrite": "true",
    };

    // 上传文件到 Oss
    const ossSuccessInfo = await client.put(
      ossPath,
      path.normalize(localPath),
      { headers }
    );

    // 删除本地图片
    await unlinkSync(localPath);

    /**
     * 设置返回格式
     */
    return res.send({
      code: 0,
      data: [ossSuccessInfo],
      msg: "文件上传成功",
    });
  } catch (err: any) {
    console.log(err);
    // 删除本地图片
    await unlinkSync(localPath);

    return res.send({
      code: 500,
      data: null,
      msg: "文件上传失败",
    });
  }
};
